home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / pascal / pcl4p40.zip / PCL4P.USR < prev    next >
Text File  |  1993-10-17  |  71KB  |  1,862 lines

  1.  
  2.  
  3.                           Personal Communications Library
  4.  
  5.                                 For Turbo Pascal
  6.  
  7.  
  8.                                     (PCL4P)
  9.  
  10.  
  11.  
  12.                                  USERS MANUAL
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                                   Version  4.0
  19.  
  20.                                   Oct 18, 1993
  21.  
  22.  
  23.  
  24.  
  25.                         This software is provided as-is.
  26.                  There are no warranties, expressed or implied.
  27.  
  28.  
  29.  
  30.  
  31.                               Copyright (C) 1993
  32.                               All rights reserved
  33.  
  34.  
  35.  
  36.                               MarshallSoft Computing, Inc.
  37.                               Post Office Box 4543
  38.                               Huntsville AL 35815
  39.  
  40.                               Voice 205-881-4630
  41.                               FAX   205-881-4630
  42.                               BBS   205-880-9748
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.         PCL4P Users Manual                                     Page 1
  61.                               C O N T E N T S
  62.  
  63.  
  64.  
  65.  
  66.  
  67.          Chapter                                                   Page
  68.  
  69.          1.0 Introduction................................................3
  70.              1.1 User Support............................................4
  71.              1.2 A Typical Application...................................5
  72.              1.3 Installation............................................6
  73.          2.0 Library Organization........................................7
  74.              2.1 Configuration...........................................7
  75.              2.2 Initialization & Termination............................7
  76.              2.3 Modem Control & Status..................................8
  77.              2.4 Serial I/O..............................................8
  78.              2.5 Error Detection.........................................9
  79.              2.6 General Support.........................................9
  80.          3.0 Library Overview...........................................10
  81.              3.1 Using the Library......................................10
  82.              3.2 Example Programs.......................................10
  83.              3.3 Compiling & Linking....................................11
  84.              3.4 Turbo Vision...........................................11
  85.          4.0 Talking to Your Modem......................................12
  86.              4.1 Modem Standards........................................12
  87.              4.2 Flow Control...........................................13
  88.              4.3 Modem Initialization...................................14
  89.          5.0 Problems...................................................15
  90.          6.0 Serial Communications......................................16
  91.              6.1 Communications Basics..................................16
  92.              6.2 Standard Port Addresses................................17
  93.              6.3 Running 3 or 4 Ports Concurrently......................18
  94.              6.4 Using the DigiBoard....................................19
  95.              6.5 Transmitter Interrupts.................................20
  96.              6.6 RS232 Signals..........................................21
  97.              6.7 National INS8250, INS16450, and INS16550 UARTs.........22
  98.              6.8 Register Summary.......................................23
  99.          7.0 Terminal Emulator Program (TERM)...........................25
  100.          8.0 Legal Issues...............................................26
  101.              8.1 Registration...........................................27
  102.              8.2 Referral Plan..........................................26
  103.              8.3 License................................................27
  104.              8.4 Warranty...............................................27
  105.          9.0 Summary....................................................28
  106.              9.1 Revision History.......................................28
  107.              9.2 Function Summary.......................................30
  108.              9.3 Further Reading........................................30
  109.         10.0 Other MarshallSoft Computing products for Pascal...........31
  110.              10.1 The LZW Data Compression Library for Pascal...........31
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.         PCL4P Users Manual                                     Page 2
  121.          1.0 Introduction
  122.  
  123.  
  124.          The Personal Communications Library for Turbo Pascal (PCL4P) is an
  125.          asynchronous   communications  library  designed  for  experienced
  126.          software developers programming in Turbo Pascal, version  4.0  and
  127.          up. The PCL features:
  128.  
  129.          o 32 communications and support functions.
  130.          o Support for the high performance INS16550 UART.
  131.          o Supports hardware (RTS/CTS) flow control.
  132.          o Interrupt driven receiver and transmitter (optional).
  133.          o Supports 300 baud to 115,200 baud.
  134.          o Supports the DigiBoard PC/4 and PC/8.
  135.          o Supports COM1 through COM4 (through COM10 with DigiBoard).
  136.          o Adjustable receive queues from 8 bytes to 32 KB.
  137.          o Control-BREAK error exit.
  138.          o 18 communications error conditions trapped.
  139.          o Allows 4 ports to run concurrently (10 with DigiBoard).
  140.          o Complete modem control & status.
  141.          o Written in assembly language for small size & high speed.
  142.          o Terminal program featuring ASCII (with XON/XOFF), XMODEM, YMODEM,
  143.            and YMODEM-G.
  144.  
  145.          Why should you buy PCL4P ? I can give you several good reasons.
  146.  
  147.            COMPLETE - PCL4P is complete since it provides absolute control
  148.                       of the serial ports (including the high  performance
  149.                       INS16550).
  150.  
  151.             COMPACT - PCL4P  is  very compact  at  less  than  6  KB. Your
  152.                       application doesn't carry a lot of excess code.
  153.  
  154.                FAST - PCL4P is fast since it will  run  at  38400  baud  on
  155.                       even  slow  8088 PCs (4.77 MHZ) and at 115200 baud on
  156.                       most everything else.
  157.  
  158.             SUPPORT - If you get stuck,  you talk  to  the programmer  that
  159.                       wrote the code, not a  person  hired  to  answer  the
  160.                       phone.
  161.  
  162.                 BBS - A BBS is available (2400 to 9600 baud, N81) in order
  163.                       to provide immediate support as necessary.
  164.  
  165.          NEWSLETTER - One  year  subscription  to  the  MSC  newsletter
  166.                       discusses communications  problems  and  solutions
  167.                       (published quarterly).
  168.  
  169.               PRICE - You get PCL4P for a very reasonable price !
  170.  
  171.            UPGRADES - Once you buy PCL4P, you can always update to  the  most
  172.                       recent  version  for  little  more  than  the  cost  of
  173.                       sending it out to you.
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.         PCL4P Users Manual                                     Page 3
  181.          1.1 User Support
  182.  
  183.          We want you to be successful in developing your applications using
  184.          PCL4P!  We depend on our customers to let us know what  they  need
  185.          in  a  communications  library.   This  means  we are committed to
  186.          providing the best communications library that we can. If you have
  187.          any suggestions or comments, please let us know.
  188.  
  189.          If  you  are having a problem using PCL4P, call us at 205-881-4630
  190.          between 5 PM and 9 PM CST Monday through Saturday, or  FAX  us  at
  191.          the  same  telephone  number at any time (24 hours).  You can also
  192.          call at other times and leave a message, and call back later for a
  193.          reply. However, we can only answer questions with respect to using
  194.          the PCL4P library. We cannot help you program your application.
  195.  
  196.          You may also call our User Support BBS  (2400  to  9600  baud,  no
  197.          parity,  8  data  bits,  1  stop  bit) at 205-880-9748 and leave a
  198.          message (address it to the SYSOP).  We will usually have  a  reply
  199.          ready for you within 24 hours.
  200.  
  201.          The  BBS  is available 24 hours per day except at 2 PM Sundays for
  202.          maintenanace. All files are in standard ZIP format. The  BBS  will
  203.          contain  the latest shareware version of all MarshallSoft products
  204.          as well as related files such as:
  205.  
  206.              BUGS.ZIP  --  Bug report.
  207.              NEWS.ZIP  --  Latest news regarding our products.
  208.  
  209.          The  MarshallSoft  Computing,  Inc.   newsletter  "Comm  Talk"  is
  210.          published quarterly.  It discusses various communications problems
  211.          and   solutions  using  PCL4P  as  well  as  related  information.
  212.          Registered users receive a  one  year  complimentary  subscription
  213.          when first registering and for each update purchased.
  214.  
  215.          Of  course, you can always write to us. You should receive a reply
  216.          within a week or so.
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.         PCL4P Users Manual                                     Page 4
  241.          1.2 A Typical Application
  242.  
  243.  
  244.          In  general,  there  are  two  classes  of applications that use a
  245.          communications library like PCL4P -- those that  use  a  modem  to
  246.          connect  to the outside world and those that connect directly to a
  247.          peripheral device. In either case, a typical  application  program
  248.          using PCL4P might look like the following code outline:
  249.  
  250.  
  251.  
  252.          ******************************************************************
  253.          *                                                                *
  254.          * program YourProgram                                            *
  255.          *                                                                *
  256.          * uses PCL4P;                                                    *
  257.          * ...                                                            *
  258.          * ...                                                            *
  259.          * var Buffer : array[0..1023] of Char;                           *
  260.          * ...                                                            *
  261.          * begin (* YourProgram *)                                        *
  262.          *    RetCode := SioRxBuf(Port,Ofs(Buffer),Seg(Buffer),Size1024); *
  263.          *    RetCode := SioParms(Port,NoParity,OneStopBit,WordLength8);  *
  264.          *    RetCode := SioReset(Port,Baud2400);                         *
  265.          *    ...                                                         *
  266.          *    ... ( application code )                                    *
  267.          *    ...                                                         *
  268.          *    RetCode := SioDone(Port);                                   *
  269.          * end. (* YourProgram *)                                         *
  270.          ******************************************************************
  271.  
  272.  
  273.          In the above example, SioRxBuf is called to set up the a 1024 byte
  274.          receive  buffer; SioParms is called to set up the parity, stop bit
  275.          count, and word length; SioReset is called to set the baud rate to
  276.          2400 and  reset  the  UART  (  Univeral  Asynchronous  Receiver  /
  277.          Transmitter ).
  278.  
  279.          Before  leaving your application, SioDone is called to restore the
  280.          prior state of the serial communications system.
  281.  
  282.          If  you  are  using  a  modem, you also need to be concerned about
  283.          initializing your modem correctly and handling any  required  flow
  284.          control. Refer to the "Talking to Your Modem" chapter for detailed
  285.          information.
  286.  
  287.          If  you  are  using  the  versions of the library with transmitter
  288.          interrupts enabled (PCL4P_2.LIB) then SioTxBuf must be  called  to
  289.          set up the transmitter queue.
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.         PCL4P Users Manual                                     Page 5
  301.          1.3 Installation
  302.  
  303.  
  304.          (1)  Before installation of PCL4P, your compiler should already be
  305.          installed on your system and tested. If you are not familiar  with
  306.          makefiles,  refer  to  your  compiler  manual.   Examine  the file
  307.          "FILES.LST" for a list of all the distribution files.
  308.  
  309.          (2) Make a backup  copy  of  your  distribution  disk.   Put  your
  310.          original distribution disk in a safe place.
  311.  
  312.          (3) Create a work directory  on  your  work  disk  (normally  your
  313.          harddisk). For example, to create a work directory named PCL4P, we
  314.          first log onto the work disk and then type:
  315.  
  316.                                MKDIR PCL4P
  317.  
  318.          (4)  Copy  all the files from your backup copy of the distribution
  319.          disk to your work directory.  For example, to  copy  from  the  A:
  320.          drive to your work directory, we type:
  321.  
  322.                               CD PCL4P
  323.                               COPY A:*.*
  324.  
  325.  
  326.          (5) The library unit PCL4P.TPU is compiled with Turbo Pascal  6.0.
  327.          If  you  are  using  another  version  (4.0  or above), you should
  328.          recompile the library unit as follows:
  329.  
  330.                TPC PCL4P
  331.  
  332.          (6) Compile SIMPLE.PAS:
  333.  
  334.                               TPC SIMPLE
  335.  
  336.          SIMPLE.PAS should compile without any problems.
  337.  
  338.          (7) The recommended way to  test  SIMPLE  is  to  run  it  on  two
  339.          computers  connected  by a null modem cable.  Whatever is typed on
  340.          one computer should be displayed on the other.
  341.  
  342.          (8) Compile and run TERM.PAS.
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.         PCL4P Users Manual                                     Page 6
  361.          2.0 Library Organization
  362.  
  363.  
  364.          The  PCL4P  library is organized into six categories of functions.
  365.          Refer to the PCL  Reference  Manual  (PCL4P.REF)  for  details  on
  366.          individual functions.
  367.  
  368.  
  369.          2.1 Configuration
  370.  
  371.  
  372.          There are three functions in the configuration category.  SioPorts
  373.          is used to set the number of PC ports, specify the first DigiBoard
  374.          port,  and  set the DigiBoard status register address.  SioUART is
  375.          used to change the UART base address for a communications port  to
  376.          a   non-standard  address,  while  SioIRQ  is  used  to  assign  a
  377.          nonstandard  IRQ  line  to  a  port.    (See   the   chapter   IBM
  378.          Communications  Ports  for more details on standard UART addresses
  379.          and IRQ lines).
  380.  
  381.          The  configuration  functions SioPorts, SioUART and SioIRQ must be
  382.          called before  calling  any  other  library  functions.   Be  very
  383.          careful  in  using  these  functions.   Remember  that your serial
  384.          hardware must support the UART and IRQ that you  specify.
  385.  
  386.          SioPorts -- Set # PC ports, 1st DigiBoard port & status register.
  387.          SioUART  -- Sets the UART base address.
  388.          SioIRQ   -- Assigns an IRQ line to a port.
  389.  
  390.          THE IRQ GOLDEN RULE: You may open (via SioReset) only one port per
  391.          IRQ (except for the DigiBoard).
  392.  
  393.  
  394.          2.2 Initialization & Termination
  395.  
  396.  
  397.          There  are  eight  functions in the initialization and termination
  398.          category.  Together, SioParms, SioFIFO,  SioRxBuf,  SioTxBuf,  and
  399.          SioReset  initialize  your  serial  communications  system.   Your
  400.          application  must  call  SioParms  and  SioRxBuf  before   calling
  401.          SioReset,  and  SioReset  must  be  called  before  any serial I/O
  402.          processing can be done.
  403.  
  404.          After initialization, SioParms and SioBaud can be called again  to
  405.          change  the communications parameters without resetting the serial
  406.          port. SioFlow can be called to enable hardware flow control.
  407.  
  408.          Before exiting from your  application,  SioDone  must  be  called.
  409.          Failure to call SioDone can crash your system later.
  410.  
  411.          SioRxBuf   -- Sets up receive buffer.
  412.          SioTxBuf   -- Sets up transmitter buffer.
  413.          SioFIFO    -- Sets the interrupt level for the INS16550.
  414.          SioParms   -- Sets parity, stop bits, and word length.
  415.          SioReset   -- Initialize a serial port for processing.
  416.          SioDone    -- Terminates further serial processing.
  417.          SioBaud    -- Sets the baud rate of the selected port.
  418.          SioFlow    -- Enables / disables flow control.
  419.  
  420.         PCL4P Users Manual                                     Page 7
  421.          2.3 Modem Control & Status
  422.  
  423.  
  424.          There  are  seven  functions  in  the  modem  control  and  status
  425.          category which provide your application with complete control over
  426.          the status and control bits of your modem.
  427.  
  428.          There are two modem control bits, "Data Terminal Ready" (DTR)  and
  429.          "Request  To  Send" (RTS). These bits can be read, set, or cleared
  430.          by SioDTR and SioRTS.
  431.  
  432.          There are four modem status bits, "Data Set Ready"  (DSR),  "Clear
  433.          To  Send"  (CTS), "Ring Indicator" (RI), and "Data Carrier Detect"
  434.          (DCD). SioModem can read any of the  modem  status  bits.  SioDSR,
  435.          SioCTS,  SioRI,  and  SioDCD  can only read their respective modem
  436.          status bit.
  437.  
  438.          Refer to the chapter entitled "RS232 Signals" for a discussion  of
  439.          each of the control and status bits.
  440.  
  441.          SioDTR    -- Set, clear, or read the Data Terminal Ready (DTR) bit.
  442.          SioRTS    -- Sets, clears, or reads the Request to Send (RTS) line.
  443.          SioModem  -- Reads the modem status register.
  444.          SioDSR    -- Reads the Data Set Ready (DSR) modem status bit.
  445.          SioCTS    -- Reads the Clear to Send (CTS) modem status bit
  446.          SioDCD    -- Reads the Data Carrier Detect (DCD) modem status bit.
  447.          SioRI     -- Reads the Ring Indicator (RI) modem status bit.
  448.  
  449.  
  450.          2.4 Serial I/O
  451.  
  452.  
  453.          There are eight library  functions  in  the  serial  I/O  category.
  454.          Together,  these  functions  give  the programmer complete control
  455.          over serial I/O.  Higher level functions  such  as  protocols  and
  456.          smart  modem communications can be completely implemented in terms
  457.          of these functions. Refer to the example code.
  458.  
  459.          SioGetc and SioPutc perform all the actual serial I/O.   SioUnGetc
  460.          "ungets"  the last serial byte read. SioRxFlush clears the receive
  461.          queue  while  SioTxFlush  clears  the  transmit  queue.   SioRxQue
  462.          returns  the  number  of bytes in the receive queue while SioTxQue
  463.          returns the number of bytes in the transmit queue. SioLine can  be
  464.          used to test for UART errors.
  465.  
  466.          SioGetc    -- Reads the next character from the serial line.
  467.          SioPutc    -- Transmit a character over a serial line.
  468.          SioUnGetc  -- "Un-gets" (puts back) a specified character.
  469.          SioRxFlush -- Flush (clears) the receive buffer.
  470.          SioRxQue   -- Returns the number of characters in the receive queue.
  471.          SioTxFlush -- Flush (clears) the transmit buffer.
  472.          SioTxQue   -- Returns the number of characters in the transmit queue.
  473.          SioLine    -- Reads the line status register.
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.         PCL4P Users Manual                                     Page 8
  481.          2.5  Error Detection
  482.  
  483.  
  484.          There are four functions in the error detection category. They are
  485.          concerned with detecting or reporting communications errors.   Use
  486.          of  these  functions  can make your application significantly more
  487.          robust.
  488.  
  489.          SioBrkKey   can   be   used  as  an  "emergency"  exit  from  your
  490.          application. SioBrkSig can read or modify the UART break bit. This
  491.          is useful for signalling the remote system that a fatal  condition
  492.          has  occurred.  SioLoopBack  can  be used to test the integrity of
  493.          your UART.  SioError displays a error message corresponding to  an
  494.          error  code  returned  from a PCL4P function.
  495.  
  496.          SioBrkKey -- Returns non-zero if the Control-BREAK key was pressed
  497.          SioBrkSig -- Asserts, cancels, or detects  BREAK  signal.
  498.          SioError  -- Displays  error  in  text.
  499.          SioLoopBack -- Performs a UART loopback test.
  500.  
  501.  
  502.          2.6 General Support
  503.  
  504.  
  505.          There are two functions in the general support category.  Strictly
  506.          speaking,  they are not communications functions, but they take up
  507.          a very small amount of additional memory.   Registered  users  can
  508.          remove these functions from the library if needed.
  509.  
  510.          SioInfo     -- Returns the library version & memory model.
  511.          SioTimer    -- Returns the number of system clock tics.
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.         PCL4P Users Manual                                     Page 9
  541.          3.0 Library Organization
  542.  
  543.  
  544.          3.1 Using the Library
  545.  
  546.  
  547.          The  PCL4P  library has been tested on a TANDY 1000 (4.77 MHZ 8088
  548.          IBM PC clone), a TANDY 3000 (80286 IBM AT clone), a  TANDY  1400LT
  549.          (IBM XT clone), and a Gateway 2000 Cache (25 MHZ 80386-DX).  PCL4P
  550.          has been tested under MSDOS 2.11, 3.2, 3.3, 4.01, and 5.0.
  551.  
  552.          Please  examine  the  PCL4P.PAS file. Note that COM1 is defined as
  553.          port zero, not port one.  The user must assume  the  responsibilty
  554.          for  passing the correct information when calling PCL4P functions.
  555.  
  556.  
  557.          3.2 Example Programs
  558.  
  559.  
  560.          Two communications programs are provided as a demonstration of the
  561.          PCL4P library -- SIMPLE and TERM.
  562.  
  563.          SIMPLE  is  provided  as  the  simpliest example of communications
  564.          programming  using  PCL4P.   The  user  should  compile  and  link
  565.          SIMPLE.PAS as a test of the library.
  566.  
  567.          If you have two computers, connect them together with a null modem
  568.          cable and run SIMPLE on both machines.  The baud rate in SIMPLE is
  569.          hard  coded to 2400 baud. It is easily changed in the source code.
  570.          Start SIMPLE by typing SIMPLE followed by the port. For example:
  571.  
  572.               SIMPLE 1
  573.  
  574.          Once SIMPLE is started on both computers, whatever is typed on one
  575.          machine should be displayed on the other, and vice versa.
  576.  
  577.          The  TERM program is a more capable terminal emulator than SIMPLE.
  578.          It features modem initialization, hardware flow control, and  file
  579.          transfer  using ASCII, XMODEM, YMODEM, and YMODEM-G communications
  580.          protocols.  TERM can be used to call up any bulletin board system,
  581.          including the MarshallSoft Computing BBS.  Start  TERM  by  typing
  582.          TERM followed by the port and baud rate. For example:
  583.  
  584.               TERM 4 2400
  585.  
  586.          Refer to the chapter "Terminal Emulator Program"  for  a  complete
  587.          discussion of TERM.
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.         PCL4P Users Manual                                     Page 10
  601.          3.3 Compiling and Linking
  602.  
  603.  
  604.          Registered users may wish to assemble  PCL4PLIB.ASM.  To  assemble
  605.          using the Microsoft assembler:
  606.  
  607.                MASM PCL4PLIB /DPASCAL_MODEL;
  608.  
  609.          In order to build PCL4P.LIB with transmitter interrupts enabled:
  610.  
  611.                MASM PCL4PLIB /DPASCAL_MODEL /DSET_TBE;
  612.  
  613.          To build the library TPU:
  614.  
  615.                TPC PCL4P
  616.  
  617.          To compile the sample programs:
  618.  
  619.                TPC SIMPLE.PAS
  620.  
  621.                TPC TERM.PAS /m
  622.  
  623.          A  makefile (  TERM.MAK  )  is  also  provided  for  the  TERM.PAS
  624.          program. To compile TERM and all dependent units, type:
  625.  
  626.                MAKE -FTERM
  627.  
  628.  
  629.          3.4 Turbo Vision
  630.  
  631.  
  632.          The  PCL4P  library  can  also  be  used in Turbo Vision programs.
  633.          Examine the TVTERM.PAS for a simple example program  analogous  to
  634.          the SIMPLE.PAS program.
  635.  
  636.          TVTERM copies any keyboard input to the serial port and copies any
  637.          incoming serial port data to the screen. Type Alternate-X to exit.
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.         PCL4P Users Manual                                     Page 11
  661.          4.0 Talking to Your Modem
  662.  
  663.  
  664.          A modem is  used  to  extend  the  distance  over  which  you  may
  665.          communicate.   Without  a  modem, your RS232 cable is limited to a
  666.          maximum of approximately 50  feet.  But  with  a  modem,  you  can
  667.          communicate literally around the world.
  668.  
  669.  
  670.          4.1 Modem Standards
  671.  
  672.  
  673.          Two modems can communicate over a telephone line only if they  are
  674.          both  using  the  same signaling frequencies and modulation, which
  675.          are determined by the the modem standards used.   Modem  standards
  676.          can  be  divided  into three sets: (1) speed, (2) data compression
  677.          used, and (3) error control.
  678.  
  679.          The Bell standards (103 & 212A) are those of AT&T.  The CCITT (The
  680.          International  Consultative Committee for Telephone and Telegraph)
  681.          standards are designated as "V. ".
  682.  
  683.  
  684.          Speed
  685.  
  686.          Bell 103  --   300 baud
  687.          Bell 212A --  1200 baud
  688.          V.21      --   300 baud
  689.          V.22bis   --  1200 & 2400 baud
  690.          V.32      --  4800 & 9600 baud
  691.          V.32bis   --  4800, 7200, 9600, 12000, and 14400 baud
  692.  
  693.  
  694.          Data Compression
  695.  
  696.          MNP 5     --  Microcom Networking Protocol (proprietary).
  697.          V.42bis   --  International data compression standard.
  698.  
  699.  
  700.          Error Control
  701.  
  702.          MNP 2,3,4 --  Three level error correction (public domain).
  703.          V.42      --  International error correction standard.
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.         PCL4P Users Manual                                     Page 12
  721.          4.2 Flow Control
  722.  
  723.  
  724.          With modems using data compression, the modem to modem  connection
  725.          will  run  at various speeds depending on the quality of the line.
  726.          The computer to modem connection will be at  a  fixed  baud  rate.
  727.          Therefore,  a  protocol (flow control) is necessary to synchronize
  728.          the data flow  between  and  modems  and  the  computer  to  modem
  729.          connection.   Refer  to  your modem manual for information on flow
  730.          control protocols supported.
  731.  
  732.          Two  flow  control  protocols  are  used  by most all modems which
  733.          require flow control. Software flow control is  called  "XON/XOFF"
  734.          (other  software  flow  control  character  pairs  are defined but
  735.          operate the same as XON/XOFF) and hardware flow control is  called
  736.          "RTS/CTS".  Most modems which require flow control enable hardware
  737.          flow control by default.
  738.  
  739.          In   XON/XOFF  (software)  flow  control,  the  computer  suspends
  740.          transmitting data if it receives a XOFF character  (13  hex)  from
  741.          the  modem,  and  continues  transmitting  when  it receives a XON
  742.          character (11 hex).  Similiarly, the computer can signal the modem
  743.          not to send any more data by transmitting a XOFF to  it,  and  can
  744.          tell the modem to continue transmission be sending a XON.
  745.  
  746.          In  RTS/CTS  (hardware)  flow control, the RTS line is used by the
  747.          computer to signal the modem , while the CTS line is used  by  the
  748.          modem  to  signal  the  computer.  The  RTS line is set OFF by the
  749.          computer to tell the modem to suspend transmission, and set to  ON
  750.          to  tell  the modem to continue transmission.  The CTS line is set
  751.          to OFF by the modem to tell the computer to stop transmitting, and
  752.          set to ON to tell the computer to continue transmitting.
  753.  
  754.          Given  the  choice,  always  choose  hardware  flow  control  over
  755.          software  flow  control  so  that   all   data   transmission   is
  756.          transparent.   If  hardware flow control is not the default (which
  757.          it almost always is), you should modify your modem  initialization
  758.          string to turn hardware flow control on.
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.         PCL4P Users Manual                                     Page 13
  781.          4.3 Modem Initialization
  782.  
  783.  
  784.          If your application uses a modem (as opposed to using a null modem
  785.          cable),  then  you  should always send an initialization string to
  786.          your modem if it is a programmable modem such  as  those  made  by
  787.          Hayes.   Communication  programs  such as PROCOMM and TELIX always
  788.          send such a string automatically as soon as they start up.
  789.  
  790.          The particular initialization string depends on the make  of  your
  791.          modem.   For Hayes and Hayes AT command set compatible modems, the
  792.          following string (followed by a carriage return) should work:
  793.  
  794.               AT E1 S7=60 S11=60 V1 X1 Q0 S0=0
  795.  
  796.          Refer to your Modem User's Guide for a full  discussion  of  these
  797.          commands. A brief description is as follows:
  798.  
  799.          AT     Modem attention command.
  800.          E1     Modem will echo what you send to it.
  801.          S7=60  Wait 60 seconds for carrier and/or dial tone.
  802.          S11=60 Use 60 milliseconds for tone dialing duration & spacing.
  803.          V1     Display result code as words (not numbers).
  804.          X1     Use the extended result message (CONNECT XXXX) set.
  805.          Q0     Modem returns result codes.
  806.          S0=0   Do not answer RING.
  807.  
  808.          If your application will answer incoming calls, then  set  the  S0
  809.          register to the ring on which to automatically answer.
  810.  
  811.          If you send the above codes by using SioPutc (as opposed to typing
  812.          them from the keyboard), then follow these guidelines:
  813.  
  814.          (1) Send an initial  carriage  return  before  the  initialization
  815.          string.
  816.  
  817.          (2) Pause at least two tics (18 tics to  the  second)  after  each
  818.          character  sent  as  your  modem needs the time to perform its own
  819.          internal processing.  Pause a little longer if your modem  is  not
  820.          accepting your initialization string.
  821.  
  822.          (3) Pause one and a half seconds after sending any  initialization
  823.          command  such  as ATZ or AT&F since your modem must do quite a bit
  824.          of processing.
  825.  
  826.          If you experience any problems in initializing your  Hayes  modem,
  827.          you should first reset it to factory settings by sending:
  828.  
  829.               AT&F
  830.  
  831.          Refer  to  the  TERM  program (functions SendTo and WaitFor in the
  832.          file MODEM_IO.PAS) for an example  of  sending  an  initialization
  833.          string to a Hayes compatible modem.
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.         PCL4P Users Manual                                     Page 14
  841.          5.0 Problems
  842.  
  843.  
  844.          If  you cannot get your application to run properly, first compile
  845.          and run the  terminal  emulator  program  TERM  provided  on  your
  846.          distribution  disk.   If  you  are  using  a null modem cable or a
  847.          non-programmable modem, be sure not to  define  AT_COMMAND_SET  in
  848.          DEFINES.PAS.  If  you  are using a Hayes compatible modem, then do
  849.          define AT_COMMAND_SET {$DEFINE AT_COMMAND_SET}. If you  are  using
  850.          a  programmable modem which is not Hayes compatible, then you must
  851.          modify the initialization string for your particular modem.
  852.  
  853.          If your application does not run but TERM runs correctly, then you
  854.          have  most  likely made a programming mistake in your application.
  855.          MarshallSoft Computing cannot debug your  application,  especially
  856.          over  the telephone!  However, consider each of the following when
  857.          searching for an error in your application.
  858.  
  859.          1.  Did you include the "uses PCL4P" statement ?
  860.  
  861.          2.  Is your receive buffer large enough ? If you are using 1K data
  862.              blocks in YMODEM, then your receive buffer should be at  least
  863.              1K ( 2K if baud rates above 38400 are to be used ).
  864.  
  865.          4.  Have you selected too high a baud rate ( if you  are  using  a
  866.              slow PC ) ?  If only one COM port is being run, you should  be
  867.              able to run at 38400 baud on 8088 machines and 115200 on  most
  868.              286 and all 386 and 486 machines.
  869.  
  870.          5.  Are  you  attempting  to  run  another  application   in   the
  871.              background ?  Try running  without any other programs  running
  872.              in the background ( unload all TSR programs ).
  873.  
  874.          6.  If you are running two COM ports simultaneously, are you using
  875.              separate receive buffers ? ( you should ).
  876.  
  877.          7.  Did SioReset return a zero value ?  If not, then you must call
  878.              SioReset again. See TERM.PAS for an example.
  879.  
  880.          8.  Did you send the proper initialization string to your modem ?
  881.              Did you set DTR and RTS ? ( you should ).
  882.  
  883.          9.  Do you have more than one COM1 port, etc.  For example, if you
  884.              have a COM1 port on your motherboard,  you cannot add  another
  885.              COM1  port  or  modem  board  that  uses  COM1  without  first
  886.              disabling the COM1 on the motherboard.
  887.  
  888.          Registered  users  can call (205) 881 - 4630 from 5 PM to 9 PM CST
  889.          Monday through Friday for help.
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.         PCL4P Users Manual                                     Page 15
  901.          6.0 Serial Communications
  902.  
  903.  
  904.          6.1 Communications Basics
  905.  
  906.  
  907.          The  heart  of  serial  communications  is  the  UART   (Universal
  908.          Asynchronous   Receiver   Transmitter).    The  IBM  PC/XT/AT  and
  909.          compatibles use the INS8250, INS16450, or the INS16550 UART.   The
  910.          purpose of the UART is:
  911.  
  912.          (1)  To convert bytes from the CPU (Central Processing Unit), into
  913.          a serial format by adding the necessary start,  stop,  and  parity
  914.          bits  to  each byte before transmission, and to then transmit each
  915.          bit at the correct baud rate.
  916.  
  917.          (2) To convert the incoming stream (at a specified baud  rate)  of
  918.          serial  bits  into  bytes  by removing the start, stop, and parity
  919.          bits before being made available to the CPU.
  920.  
  921.          The  UART  is  part of the serial interface circuitry which allows
  922.          the CPU to send and receive signals over the RS232 lines. This can
  923.          be diagrammed as follows:
  924.  
  925.                                Serial Interface
  926.                             *********************
  927.                             *                   *
  928.          *******  Data Bus  *     ********      *    RS232 Signals
  929.          * CPU **************     * UART *      ******************
  930.          *******            *     ********      *
  931.                             *                   *
  932.                             *********************
  933.  
  934.          The  INS8250/16450/16550  UART  is  capable of operating in one of
  935.          two  modes,  "polled"  and   "interrupt   driven".    The   serial
  936.          communications  functions  in the BIOS uses the polled method.  In
  937.          this approach, the CPU is typically in  a  loop  asking  the  UART
  938.          over  and  over  again  if  it  has a byte ready. If its does, the
  939.          polling code returns the byte.  But, if the  next  byte  comes  in
  940.          before  the  polling  code  is  executing again, then that byte is
  941.          lost.
  942.  
  943.          In  the  interrupt  driven  approach  (used  by PCL4P for incoming
  944.          data), when a byte is received by the UART, an "Interrupt  Service
  945.          Routine"  (ISR)  is  executed  immediately, suspending temporarily
  946.          whatever else is executing.  The ISR then  moves  the  byte  to  a
  947.          buffer  so  that your application program can later read it. Refer
  948.          to the sections entitled "RS232  Signals"  and  "National  INS8250
  949.          UART" for further information on these topics.
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.         PCL4P Users Manual                                     Page 16
  961.          6.2 Standard Port Addresses
  962.  
  963.  
  964.          There  are  a  few  things to know about how serial communications
  965.          ports are used by  IBM  PC/XT/AT  and  compatible  computers.  The
  966.          standard IBM PC/XT/AT configuration values are as follows:
  967.  
  968.          Port     Reg Base   IRQ Line   Vector
  969.          COM1        3F8H        4        12
  970.          COM2        2F8H        3        11
  971.          COM3        3E8H        4        12
  972.          COM4        2E8H        3        11
  973.  
  974.          (Refer to your DigiBoard manual for DigiBoard addresses).
  975.  
  976.          PCL4P assumes the  above  values.  If  necessary,  the  UART  base
  977.          address    can   be  changed  by  SioUART,  and  IRQ  lines can be
  978.          re-assigned by SioIRQ. Refer to the  PCL4P  Reference  Manual  for
  979.          specific details.
  980.  
  981.          When installing new communications cards, the following guidelines
  982.          are recommended:
  983.  
  984.          (1) Be sure to read the documentation  for  the  hardware  you  are
  985.          installing.   Pay special attention to UART base addresses and IRQ
  986.          lines.
  987.  
  988.          (2) If you have a choice in base addresses and IRQ  lines,  always
  989.          choose standard values as defined above.
  990.  
  991.          (3)  The  first port should be COM1, the second COM2, etc.  Do NOT
  992.          skip over any port. This problem has caught several users.
  993.  
  994.          (4)  Use  SioUART  to  zero  all  unused ports (for example, call
  995.          SioUART(COM4,0) if there is no COM4 port installed).
  996.  
  997.          (5)  Be  carefull not to configure two ports for the same address.
  998.          This is easier to do than you may believe.
  999.  
  1000.          (6) Choose an external modem over an internal  one.   It  is  much
  1001.          easier  to  debug problems with an external modem than an internal
  1002.          one.
  1003.  
  1004.          (7)  Select  hardware  flow  control  (RTS/CTS) if flow control is
  1005.          required and hardware flow control is not the default.
  1006.  
  1007.          (8) Always test your port as soon as it is installed.
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.         PCL4P Users Manual                                     Page 17
  1021.          6.3 Running 3 or 4 Ports Concurrently
  1022.  
  1023.  
  1024.          PCL4C supports up to 4 serial ports running concurrently (more  if
  1025.          you  have  a  DigiBoard).  One  free  interrupt  for  each port is
  1026.          required. The following assumes that you don't have a DigiBoard.
  1027.  
  1028.          Interrupts IRQ4 and IRQ3 are dedicated to the communications ports
  1029.          in a standard IBM PC/XT/AT configuration.  IRQ4 is shared  between
  1030.          COM1  and  COM3  while IRQ3 is shared between COM2 and COM4.  This
  1031.          means that you can run two ports simultaneously provided that they
  1032.          don't share an interrupt.
  1033.  
  1034.          Suppose that you wish to run 3 ports simultaneously. To begin, you
  1035.          must have 3 serial UARTs installed on your computer.  Assume,  for
  1036.          purposes  of  this  discussion,  that  COM1  is  installed on your
  1037.          motherboard,  and  that  you  have  purchased   a   new   2   port
  1038.          serial communications board.
  1039.  
  1040.          You  should  be  able  to configure the first serial board port as
  1041.          COM2, which uses IRQ3.  Refer to the manual that  came  with  your
  1042.          serial board.
  1043.  
  1044.          In  order to run the third serial port concurrently with the first
  1045.          two, a unused interrupt must be found.  If your  serial  card  can
  1046.          only  use  IRQ3 and IRQ4, then there is no way to run a third line
  1047.          since IRQ4 and IRQ3 are used for COM1 and COM2.
  1048.  
  1049.          However,  many  serial  cards  can  use other IRQs, typically IRQ2
  1050.          through IRQ5. Since IRQ5 is normally used  for  a  second  printer
  1051.          port,  it  is a good candidate for COM3. To use IRQ5 for the third
  1052.          serial port, first set your serial  card  to  use  IRQ5  for  COM3
  1053.          (refer to your serial card manual) and then add the following line
  1054.          to your applications code before calling SioReset:
  1055.  
  1056.                 RetCode := SioIRQ(COM3,IRQ5);
  1057.  
  1058.          Don't forget to disable any device that might use IRQ5, such as  a
  1059.          second  printer  port or a music card.  Unfortunately, there is no
  1060.          easy way to  determine  that  you  have  no  conflicts  until  you
  1061.          actually  attempt  to  use  the  IRQ. If there are conflicts, your
  1062.          system will probably hang and you will have to reboot.
  1063.  
  1064.          To run a fourth serial port, another free IRQ must  be  found.  On
  1065.          some  systems, IRQ2 can be used. To use IRQ2 for the fourth serial
  1066.          port, first set your serial card to use IRQ2  for  COM4  and  then
  1067.          add:
  1068.  
  1069.                 RetCode := SioIRQ(COM4,IRQ2);
  1070.  
  1071.          To summarize, your serial  card  must  be  able  to  generate  the
  1072.          correct  IRQ,  which is not already being used. Refer to the entry
  1073.          for the SioIRQ function in the PCL4C Reference Manual.
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.         PCL4P Users Manual                                     Page 18
  1081.          6.4 Using the DigiBoard
  1082.  
  1083.  
  1084.          The  Personal  Communications  Library supports the DigiBoard PC/4
  1085.          and  PC/8. In order to use the DigiBoard, you must configure PCL4P
  1086.          using the SioPorts and SioIRQ functions.
  1087.  
  1088.          Your PCs ports must be partitioned into "standard"  PC  ports  and
  1089.          DigiBoard  ports.   Remember  that  standard PC ports cannot share
  1090.          IRQs like the DigiBoard can. If you are using IRQ4  and  IRQ3  for
  1091.          standard  PC  ports  COM1 and COM2, then you cannot use either for
  1092.          DigiBoard ports (try IRQ5 or IRQ2).
  1093.  
  1094.          Suppose  that  COM1 through COM2 are standard PC ports (using IRQ4
  1095.          and IRQ3) and you have installed a PC/8 DigiBoard that you wish to
  1096.          use for COM3 through COM10 using interrupt line IRQ5.  You  choose
  1097.          to  use  the  recommended  DigiBoard UART addresses at $100, $108,
  1098.          $110, $118,  $120,  $128,  $130,  and  $138.   Add  the  following
  1099.          configuration statements before doing any other serial processing:
  1100.  
  1101.          Code := SioPorts(10,COM3,$140);   (* COM3 is first DigiBoard port *)
  1102.          Address := $100;                  (* 1st DigiBoard UART address *)
  1103.          for Port:=COM3 to COM10 do             (* look at each port *)
  1104.            begin
  1105.              Code := SioUART(Port,Address);     (* set the UART address *)
  1106.              Address := Address + 8;            (* next DigiBoard UART *)
  1107.              Code := SioIRQ(Port,IRQ5);         (* set the IRQ & ISR *)
  1108.            end
  1109.  
  1110.          The DigiBoard uses $140 for the status address for odd  interrupts
  1111.          and  0x141  for  even interrupts. Thus $140 is used for the status
  1112.          address since IRQ5 is used for the interrupt in the example above.
  1113.  
  1114.          Don't  forget  that  your  DigiBoard  hardware  must be configured
  1115.          itself  to  match  the IRQ and UART values that you specify in the
  1116.          library.
  1117.  
  1118.          The  PCL4C  comes configured for 4 PC ports and no DigiBoard ports
  1119.          -- SioPorts(4,4,0).  Refer to the PCL4P Reference Manual for  more
  1120.          detailed  information  on  SioPorts  and  SioIRQ.
  1121.  
  1122.          If you are interested in the DigiBoard, they may be  contacted  at
  1123.          6400  Flying  Cloud  Drive,  Eden  Prairie,  MN  55344.  Telephone
  1124.          612-943-9020. FAX 612-943-5398.
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.         PCL4P Users Manual                                     Page 19
  1141.          6.5 Transmitter Interrupts
  1142.  
  1143.  
  1144.          Beginning in version 4.0  of  PCL4P,  transmitter  interrupts  are
  1145.          supported  by  the  library.  Separate libraries are provided, one
  1146.          with  transmitter  interrupts  enabled  and  one   without.   When
  1147.          transmitter interrupts are NOT enabled, the following logic occurs
  1148.          everytime you call SioPutc:
  1149.  
  1150.                1. Wait for transmit buffer to become empty. The transmit
  1151.                   buffer may not be empty if the previous transmit is not
  1152.                   completed (the UART breaks down the byte & sends 1 bit
  1153.                   at a time).
  1154.                2. When  the transmit buffer is empty,  the byte from  the
  1155.                   SioPutc call is  loaded  into  the  transmit  buffer  and
  1156.                   control is returned to the caller.
  1157.  
  1158.          Note  that  you  can not write to the UART any faster the the UART
  1159.          baud rate.
  1160.  
  1161.          When  transmitter interrupts are enabled, the byte from SioPutc is
  1162.          put into a previously prepared (by  SioTxQue)  transmitter  queue.
  1163.          The  interrupt  service  routine  fetches bytes from this queue as
  1164.          soon as the previous byte has been sent.
  1165.  
  1166.          While you can now call SioPutc faster than the  baud  rate,  bytes
  1167.          are still transmitted at the given baud rate.
  1168.  
  1169.          The above sounds like transmitter interrupts are the  way  to  go.
  1170.          Unfortunately,  this  is  usually NOT the case.  Most applications
  1171.          will perform better if transmitter interrupts are NOT enabled.
  1172.  
  1173.          The  reason  is  that  transmitter interrupts double the amount of
  1174.          code in the time critical interrupt service routines.   While  the
  1175.          library  is  processing  a transmitter interrupt (which can take a
  1176.          while), incoming bytes can not be processed. What  this  means  is
  1177.          that  a  given  machine  can  run  at  a  higher baud rate without
  1178.          transmitter interrupts. This problem is  compounded  when  running
  1179.          multiple ports simultaniously.
  1180.  
  1181.          However,  there  are  a  few  application  areas where transmitter
  1182.          interrupts  are  preferable.   If   your   application   will   be
  1183.          transmitting  blocks  of  data at fairly slow baud rates you might
  1184.          profit from enabling transmitter interrupts provided that there is
  1185.          something else for the processor to do (which is NOT the  case  in
  1186.          most protocols).
  1187.  
  1188.          Recall that PCL4C_2.LIB is  the  PCL4P  library  with  transmitter
  1189.          interrupts enabled.
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.         PCL4P Users Manual                                     Page 20
  1201.  
  1202.          6.6 RS-232 Signals
  1203.  
  1204.  
  1205.          RS-232 is the name of the serial data interface standard  used  to
  1206.          connect  computers  to  modems.  Most IBM compatible computers are
  1207.          built with at least one serial port and use either DB9 (9 pin)  or
  1208.          DB25 (25 pin) connectors.
  1209.  
  1210.          A summary of these pins and  their  function  follows.   For  more
  1211.          detailed  information, refer to one of the many books dealing with
  1212.          RS-232 interfacing.
  1213.  
  1214.          Signal Ground Pin 7 (DB25), Pin 5 (DB9)
  1215.  
  1216.          The SG line is used as the common signal ground, and  must  always
  1217.          be connected.
  1218.  
  1219.          Transmit Data Pin 2 (DB25), Pin 3 (DB9)
  1220.  
  1221.          The TX line is used to carry data from the computer to the modem.
  1222.  
  1223.          Receive Data Pin 3 (DB25), Pin 2 (DB9)
  1224.  
  1225.          The RX line is used to carry data from the modem to the computer.
  1226.  
  1227.          Data Terminal Ready Pin 20 (DB25), Pin 4 (DB9)
  1228.  
  1229.          The  DTR  line is used by the computer to signal the modem that it
  1230.          is ready. DTR should be set high when talking to a modem.
  1231.  
  1232.          Data Set Ready Pin 6 (DB25), Pin 6 (DB9)
  1233.  
  1234.          The DSR line is used by the modem to signal the computer  that  it
  1235.          is ready.
  1236.  
  1237.          Request to Send Pin 4 (DB25), Pin 7 (DB9)
  1238.  
  1239.          The  RTS  line  is  used  to "turn the line around" in half duplex
  1240.          modems, and for hardware flow control in most modems that  require
  1241.          flow control.
  1242.  
  1243.          Clear to Send Pin 5 (DB25), Pin 8 (DB9)
  1244.  
  1245.          The  CTS  line  is  used  to "turn the line around" in half duplex
  1246.          modems, and for hardware flow control in most modems that  require
  1247.          flow control.
  1248.  
  1249.          Data Carrier Detect Pin 8 (DB25), Pin 1 (DB9)
  1250.  
  1251.          The DCD line is used by the modem to signal the  computer  that  a
  1252.          data carrier signal is present.
  1253.  
  1254.          Ring Indicator Pin 22 (DB25), Pin 9 (DB9)
  1255.  
  1256.          The RI line is asserted when a 'ring' occurs.
  1257.  
  1258.  
  1259.  
  1260.         PCL4P Users Manual                                     Page 21
  1261.          6.7 National INS8250, INS16450, and INS16550 UARTs
  1262.  
  1263.  
  1264.          The  Personal  Communications  Library  is  based  on the standard
  1265.          National INS8250, INS16450, and INS16550 UARTs. The 8250  was  the
  1266.          original  UART  used  in the IBM PC, whereas the 16450 is a faster
  1267.          version found on most 286 & up machines. The 16550 contains  a  16
  1268.          byte  FIFO  to further reduce communications overhead. These UARTs
  1269.          consists of 8 register ports as follows:
  1270.  
  1271.          Offset    R/W   Register
  1272.            0       R/W   Receiver (read) / Transmitter (write)
  1273.            1       R/W   Interrupt Enable (read)
  1274.            2       R     Interrupt Identification
  1275.            2       W     FIFO control (INS16550 only)
  1276.            3       R/W   Data Format (Line Control)
  1277.            4       R/W   RS-232 (Modem) Control
  1278.            5       R/W   Line Status
  1279.            6       R/W   RS-232 (Modem) Status
  1280.            7       R/W   Not used.
  1281.  
  1282.          The  UART  registers  are  based  at  3F8  (COM1), 2F8 (COM2), 3E8
  1283.          (COM3), and 2E8 (COM4). COM1 and COM3 share  interrupt  vector  12
  1284.          and  interrupt  request  line  IRQ4  while  COM2  and  COM4  share
  1285.          interrupt vector 11 and interrupt request line IRQ3.   This  means
  1286.          that  COM1  and  COM3  cannot  both  be  used  at  the  same time.
  1287.          Similarly, COM2 and COM4 cannot both be used at the same time.
  1288.  
  1289.  
  1290.          Port     Reg Base   IRQ Line   Vector
  1291.          COM1        3F8H        4        12
  1292.          COM2        2F8H        3        11
  1293.          COM3        3E8H        4        12
  1294.          COM4        2E8H        3        11
  1295.  
  1296.          Four sources of interrupts are possible with the 8250  and  16550:
  1297.          (1) receiver error or BREAK, (2) receiver data ready, (3) ready to
  1298.          transmit,  and  (4) RS232 input.  These four sources of interrupts
  1299.          are summarized as follows:
  1300.  
  1301.          Source of Interrupt        Action Required to Clear
  1302.          Receiver error or BREAK.   Read Line Status register.
  1303.          Receiver data.             Read data from data register.
  1304.          Transmitter Buffer Empty.  Write to data register or read IID reg.
  1305.          RS232 input.               Read Modem Status register.
  1306.  
  1307.          However,  PCL4P  only  enables  the receiving data interrupt. This
  1308.          means that interrupts can only be caused by incoming data.
  1309.  
  1310.          If  you  are not familiar with the INS8250, several good books are
  1311.          available.   Refer  to  the  Serial  Communications  chapter   for
  1312.          recommendations.    Although  a  knowledge  of  the  8250  is  not
  1313.          necessary to use PCL4P, a  general  knowledge  of  the  theory  of
  1314.          asynchronous serial communications is recommended.
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.         PCL4P Users Manual                                     Page 22
  1321.          6.8 Register Summary
  1322.  
  1323.  
  1324.          REG 0 : Data Register
  1325.  
  1326.          Reading  from  the data register fetches the next input byte, once
  1327.          it is ready.  Writing to the  data  register  transmits  the  byte
  1328.          written to it over the serial line.
  1329.  
  1330.          REG 1 : Interrupt Enable 
  1331.  
  1332.          The  Interrupt  Enable  register  enables  each  of  four types of
  1333.          interrupts when the appropriate bit is set to a one.
  1334.  
  1335.          bit 3 : Enable interrupt on RS232 input.
  1336.          bit 2 : Enable interrupt on receiver error or break.
  1337.          bit 1 : Enable interrupt on transmitter buffer empty (TBE).
  1338.          bit 0 : Enable interrupt on received data (RxRDY).
  1339.  
  1340.          REG 2 : Interrupt Identification (IID)
  1341.  
  1342.          Reading  the  Interrupt Identification (read only) register once
  1343.          an interrupt has occurred identifies the interrupt as follows:
  1344.  
  1345.          Bit 2  Bit 1  Bit 0  Priority    Interrupt
  1346.            0      0      1      none      none
  1347.            1      1      0      0 (high)  Serialization or break.
  1348.            1      0      0      1         Received data.
  1349.            0      1      0      2         Transmitter Buffer Empty.
  1350.            0      0      0      3 (low)   RS232 Input.
  1351.  
  1352.          In the INS16650, REG 2 (write  only)  is  also  the  FIFO  control
  1353.          register.   Writing  bits  6  &  7 will set the FIFO trigger level
  1354.          (number of bytes received before an interrupt is generated).
  1355.  
  1356.          Bit 7  Bit 6   Trigger             Bit 7  Bit 6   Trigger
  1357.           0      0      1 byte               1      0      8 bytes
  1358.           0      1      4 bytes              1      1      14 bytes
  1359.  
  1360.          REG 3 : Line Control
  1361.  
  1362.          RS232 line parameters are selected by writing to this register.
  1363.  
  1364.          bit 7 : DLAB = 0
  1365.          bit 6 : BREAK on(1), off(0).
  1366.          bits 5-3: Parity None(000),ODD(001),EVEN(011),MARK(101),SPACE(111)
  1367.          bit 2 : One stop bit(0), two stop bits(1).
  1368.          bits 1-0: Data bits = 5 (00), 6(01), 7(10), 8(11).
  1369.  
  1370.          When the Divisor Latch Access Bit (DLAB) is 1, registers 0  and  1
  1371.          become the LS and MS bytes of the Baud Rate Divisor registers.
  1372.  
  1373.          Baud   Divisor      Baud  Divisor      Baud  Divisor
  1374.           300    0180        4800   0018       38400   0003
  1375.          1200    0060        9600   000C       57600   0002
  1376.          2400    0030       19200   0006      115200   0001
  1377.  
  1378.  
  1379.  
  1380.         PCL4P Users Manual                                     Page 23
  1381.          REG 4 : Modem Control
  1382.  
  1383.          RTS, DTR, loopback testing, and General Purpose Outputs #1 and  #2
  1384.          are controlled by the Modem Control register as follows:
  1385.  
  1386.          bit 4 : Enable local loopback.
  1387.          bit 3 : Enable GP02. Necessary for 8250 interrupts.
  1388.          bit 2 : Enable GP01.
  1389.          bit 1 : Set / clear RTS.
  1390.          bit 0 : Set / clear DTR.
  1391.  
  1392.          REG 5 : Line Status
  1393.  
  1394.          Reading  the  Line  Status register provides status information as
  1395.          follows (1 for TRUE, 0 for FALSE) :
  1396.  
  1397.          bit 6 : Transmitter Empty.
  1398.          bit 5 : Transmitter Buffer Empty (TBE).
  1399.          bit 4 : BREAK detect.
  1400.          bit 3 : Framing error.
  1401.          bit 2 : Parity error.
  1402.          bit 1 : Overrun error.
  1403.          bit 0 : Data Ready.
  1404.  
  1405.          REG 6 : Modem Status
  1406.  
  1407.          Reading the Modem Status register provides  the  following  status
  1408.          information (1 for TRUE, 0 for FALSE) :
  1409.  
  1410.          bit 7 : DCD status.
  1411.          bit 6 : RI status.
  1412.          bit 5 : DSR status.
  1413.          bit 4 : CTS status.
  1414.          bit 3 : Delta DCD status.
  1415.          bit 2 : Delta RI status.
  1416.          bit 1 : Delta DSR status.
  1417.          bit 0 : Delta CTS status.
  1418.  
  1419.          The delta bits (bits 0 through 3) are  set  whenever  one  of  the
  1420.          status  bits  (bits 4 through 7) changes (from 0 to 1 or from 1 to
  1421.          0) since the last time that the Modem Status  register  was  read.
  1422.          Reading the Modem Status register clear the delta bits.
  1423.  
  1424.          REG 7 : Scratch Register
  1425.  
  1426.          There is no function associated with  register  7.   It  does  not
  1427.          exist in early versions of the 8250.
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.         PCL4P Users Manual                                     Page 24
  1441.          7.0 Terminal Emulator Example Program
  1442.  
  1443.  
  1444.          TERM is an communications program suitable for calling up bulletin
  1445.          board  systems  (BBS)  and  performing  as  a  PC  to PC file copy
  1446.          program.  TERM itself is not part of the  communications  library,
  1447.          but  rather  it  is  provided  as  an  example of a communications
  1448.          application using PCL4P.
  1449.  
  1450.          TERM can send a standard Hayes standard AT command set  string  to
  1451.          your  modem.   An  initialization  string is sent by TERM provided
  1452.          that AT_COMMAND_SET is defined in DEFINES.PAS.
  1453.  
  1454.             {$DEFINE AT_COMMAND_SET}
  1455.  
  1456.          Refer to the chapter "Modem Initialization" for  a  discussion  of
  1457.          initialization strings.
  1458.  
  1459.          TERM  also supports hardware flow control (RTS/CTS). Hardware flow
  1460.          control is observed provided that the constant RTS_CTS_CONTROL  is
  1461.          defined in the file DEFINES.PAS.
  1462.  
  1463.             {$DEFINE RTS_CTS_CONTROL}
  1464.  
  1465.          Refer to the chapter "Flow Control" for a discussion  of  hardware
  1466.          flow control.
  1467.  
  1468.          TERM  can  also  exchange  files  using  XMODEM,   YMODEM   (batch
  1469.          capability),  and  YMODEM-G  (streaming  YMODEM  used  with  error
  1470.          correcting modems)  communications  protocols.   TERM  can  accept
  1471.          wildcards in the filename so that multiple files can be sent using
  1472.          YMODEM  and  YMODEM-G.   The  protocol timing can also be adjusted
  1473.          (this  should  not  be  necessary)  by  modifying  the   constants
  1474.          SHORT_WAIT and LONG_WAIT in the PCL4P.PAS file.
  1475.  
  1476.          TERM  can also be used as a PC to PC transfer program using a null
  1477.          modem cable. In  this  case,  AT_COMMAND_SET  and  RTS_CTS_CONTROL
  1478.          should not be defined in the file DEFINES.PAS:
  1479.  
  1480.          Be  advised  that  most  null modem cables are do NOT swap RTS and
  1481.          CTS, which is necessary for hardware flow control. This means that
  1482.          RTS_CTS_CONTROL should never be defined when using  a  null  modem
  1483.          cable unless you are absolutely sure that RTS and CTS are swapped.
  1484.  
  1485.          To start TERM, type TERM followed by the port (1  to  4)  and  the
  1486.          baud  rate (300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600,
  1487.          or 115200). For example, to start TERM at 2400 baud on port COM4:
  1488.  
  1489.             TERM 4 2400
  1490.  
  1491.          The TERM program (but of course not the library itself) is  placed
  1492.          in  the  public domain by MarshallSoft Computing, Inc., and can be
  1493.          used in any way desired by the user.
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.         PCL4P Users Manual                                     Page 25
  1501.          8.0 Legal Issues
  1502.  
  1503.          8.1 Registration
  1504.  
  1505.  
  1506.          If you wish to register the EMS4C library, please send $55 plus $3
  1507.          S&H ($6 outside of North America) to:
  1508.  
  1509.                   MarshallSoft Computing, Inc.
  1510.                   Post Office Box  4543
  1511.                   Huntsville AL 35815
  1512.  
  1513.          Multiple  copies  are available: $45 for 3 to 9, $35 for 10 to 19,
  1514.          and $25 for 20 or more. A site license is also available for  $495
  1515.          (includes 5 sets of printed documentation). We pay shipping.
  1516.  
  1517.          We accept  American  Express  (account  number,  expiration  date,
  1518.          exact  name  on  your  card,  and  complete  AmEx  billing address
  1519.          required), checks in US dollars  drawn  on  a  US  bank,  purchase
  1520.          orders  (POs)  from  recognized  US schools and companies listed in
  1521.          Dun &  Bradstreet,  and  COD  (street  address  and  phone  number
  1522.          required)  within  the USA (plus a $3 COD charge).  Print the file
  1523.          PCL4P.INV if an invoice  is  needed.
  1524.  
  1525.          You  can  also  order PCL4P from The Public Software Library (PSL)
  1526.          with your MC, Visa, AmEx, or Discover card by calling 800-242-4PSL
  1527.          (from overseas: 713-524-6394) or by  FAX  at  713-524-6398  or  by
  1528.          CompuServe  at  [71355,470].  THESE NUMBERS ARE FOR ORDERING ONLY.
  1529.          The product number for PCL4P is 10909.
  1530.  
  1531.          If  you  wish  to  update from an older version of PCL4P, send $15
  1532.          plus  $3  S&H  ($6 outside  of  North  America).  Updates  must be
  1533.          ordered directly from MarshallSoft Computing.
  1534.  
  1535.          The registered package includes:
  1536.  
  1537.          o  Assembler source code for the library.
  1538.          o  Printed Users Manual.
  1539.          o  Printed Reference Manual.
  1540.          o  Telephone, FAX, BBS support for one year.
  1541.          o  EXAMPORT -- Free utility which displays  a  detailed  formatted
  1542.             report  for  any  serial port. For example, to display a report
  1543.             for COM1, type "EXAMPORT 1".
  1544.  
  1545.          Print  the  file PCL4P.INV if an invoice is needed. The registered
  1546.          user will receive the latest version of PCL4P shipped by  two  day
  1547.          priority  mail  (packet  airmail  overseas).   A 5.25" diskette is
  1548.          provided unless a 3.5" diskette is requested.
  1549.  
  1550.  
  1551.          8.2 Referral Program
  1552.  
  1553.  
  1554.          The registered user will receive  a  $5  certificate  towards  any
  1555.          MarshallSoft   Computing  product  by  referring  a  new  customer
  1556.          (someone who has never registered with us). The new customer  must
  1557.          identify  you  at  the  time  the full price order is placed.  You
  1558.          will be mailed a $5 certificate when the new registration is paid.
  1559.  
  1560.         PCL4P Users Manual                                     Page 26
  1561.          8.3 License
  1562.  
  1563.  
  1564.          MarshallSoft Computing, Inc. grants the registered user  of  PCL4P
  1565.          the right to use one copy of the PCL4P library (in object form) on
  1566.          a  single  computer  in  the  development  of any software product
  1567.          (other than libraries such as PCL4P). The user  may  not  use  the
  1568.          library  on  more  than one computer at the same time.  The source
  1569.          code for the library (PCL4PLIB.ASM) is copyrighted by MarshallSoft
  1570.          and may not be released in whole or in part.   Products  developed
  1571.          using PCL4P mat be distributed without any royalty.
  1572.  
  1573.  
  1574.          8.4 Warranty
  1575.  
  1576.  
  1577.          MARSHALLSOFT COMPUTING, INC. DISCLAIMS ALL WARRANTIES RELATING  TO
  1578.          THIS  SOFTWARE,  WHETHER  EXPRESSED  OR IMPLIED, INCLUDING BUT NOT
  1579.          LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY  AND  FITNESS
  1580.          FOR  A  PARTICULAR  PURPOSE, AND ALL SUCH WARRANTIES ARE EXPRESSLY
  1581.          AND SPECIFICALLY DISCLAIMED. NEITHER MARSHALLSOFT COMPUTING,  INC.
  1582.          NOR ANYONE ELSE WHO HAS BEEN INVOLVED IN THE CREATION, PRODUCTION,
  1583.          OR  DELIVERY  OF  THIS  SOFTWARE SHALL BE LIABLE FOR ANY INDIRECT,
  1584.  
  1585.          CONSEQUENTIAL, OR INCIDENTAL DAMAGES ARISING OUT  OF  THE  USE  OR
  1586.          INABILITY  TO  USE  SUCH  SOFTWARE EVEN IF MARSHALLSOFT COMPUTING,
  1587.          INC.  HAS BEEN ADVISED OF  THE  POSSIBILITY  OF  SUCH  DAMAGES  OR
  1588.          CLAIMS. IN NO EVENT SHALL MARSHALLSOFT COMPUTING, INC.'S LIABILITY
  1589.          FOR ANY SUCH DAMAGES EVER EXCEED THE PRICE PAID FOR THE LICENSE TO
  1590.          USE  THE SOFTWARE, REGARDLESS OF THE FORM OF THE CLAIM. THE PERSON
  1591.          USING  THE  SOFTWARE  BEARS  ALL  RISK  AS  TO  THE  QUALITY   AND
  1592.          PERFORMANCE OF THE SOFTWARE.
  1593.  
  1594.          Some  states  do not allow the exclusion of the limit of liability
  1595.          for consequential or incidental damages, so the  above  limitation
  1596.          may not apply to you.
  1597.  
  1598.          This  agreement  shall  be  governed  by  the laws of the State of
  1599.          Alabama and shall inure to the benefit of Marshallsoft  Computing,
  1600.          Inc.   and  any successors, administrators, heirs and assigns. Any
  1601.          action or proceeding brought by either  party  against  the  other
  1602.          arising  out of or related to this agreement shall be brought only
  1603.          in a STATE or FEDERAL COURT of competent jurisdiction  located  in
  1604.          Madison County, Alabama. The parties hereby consent to in personam
  1605.          jurisdiction of said courts.
  1606.  
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.         PCL4P Users Manual                                     Page 27
  1621.          9.0 Summary
  1622.  
  1623.          9.1 Revision History
  1624.  
  1625.  
  1626.          Version 1.0 -- 14 January 1991 -- original release.
  1627.  
  1628.          Version 1.1 -- 11 March 1991
  1629.  
  1630.          o  Added SioUnGetc() function to library.
  1631.  
  1632.          Version 1.2 -- 1 June 1991
  1633.  
  1634.          o  Name changed to Personal Communications Library.
  1635.          o  Minor bug fixes.
  1636.  
  1637.          Version 1.3 -- 1 July 1991
  1638.  
  1639.          o  Added NORESET option to SioReset.
  1640.          o  Added SioDSR, SioCTS, SioDCD, and SioRI.
  1641.          o  Added SioLoopBack function to library.
  1642.          o  Added LOOPBACK.PAS example program.
  1643.  
  1644.          Version 2.0 -- 1 Nov 1991
  1645.  
  1646.          o  All example code released in shareware package.
  1647.          o  Fixed bug due to Microsoft Assembler (MASM 5.0,5.1) error.
  1648.  
  1649.          Version 3.0 -- 15 Jan 1991
  1650.  
  1651.          o  Added XMODEM & YMODEM to example code.
  1652.          o  Added SioUART function.
  1653.          o  Added "UART undefined" error code.
  1654.          o  Added "Bad or missing UART" error code.
  1655.          o  Added "Port already enabled" error code.
  1656.          o  Added "Cannot enable both COM1 & COM3 ..." error code.
  1657.          o  Fixed several minor bugs ( using new automated testing ).
  1658.  
  1659.          Version 3.1 -- 1 March 1992
  1660.  
  1661.          o  Added SioFIFO ( INS16550 only ).
  1662.          o  Added SioIRQ function.
  1663.          o  Increased maximum receive buffer size to 32K bytes.
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.         PCL4P Users Manual                                     Page 28
  1681.          9.1 Revision History (continued)
  1682.  
  1683.  
  1684.          Version 3.2 -- 1 May 1992
  1685.  
  1686.          o  Modified SioReset so that it no longer clears DTR & RTS.
  1687.          o  Modified SioModel & renamed to SioInfo.
  1688.          o  Fixed bug in SioDone when using 2 ports simultaneously.
  1689.          o  Added SioFlow to library.
  1690.          o  Added YMODEM-G protocol to TERM program.
  1691.  
  1692.          Version 3.3 -- 3 August 1992
  1693.  
  1694.          o  Fixed bug in SioUnGet when using 2 ports simultaneously.
  1695.          o  Add SioRead function.
  1696.  
  1697.          Version 3.4 -- 4 Jan 1993
  1698.  
  1699.          o  Library modified to use up to four ports simultaneously.
  1700.          o  SioIRQ was modified to include  third argument.
  1701.          o  EXAMPORT utility distributed to registered users.
  1702.  
  1703.          Version 3.5 -- 15 May 1993
  1704.  
  1705.          o  Supports DigiBoard PC/4 and PC/8.
  1706.          o  Two new error traps added ("No such IRQ" & "No such ISR").
  1707.          o  ASCII file transfer protocol added to TERM (with XON/XOFF).
  1708.  
  1709.          Version 4.0 -- 18 Oct 1993
  1710.  
  1711.          o  The library supports transmitter interrupts.
  1712.          o  Corrects bug in Ver 3.5 requiring calling SioIRQ for COM3/4.
  1713.          o  The SioIRQ function has been simplified.
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.  
  1730.  
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.         PCL4P Users Manual                                     Page 29
  1741.          9.2 Function Summary
  1742.  
  1743.  
  1744.          Refer to the  PCL4P  Reference  Manual  (PCL4P.REF)  for  detailed
  1745.          information  on  the  communications  and support functions. A one
  1746.          line summary of each function follows:
  1747.  
  1748.  
  1749.          SioBaud     Sets the baud rate of the selected port.
  1750.          SioBrkKey   Returns non-zero if the Control-BREAK key was pressed.
  1751.          SioBrkSig   Asserts, cancels, or detects BREAK signal.
  1752.          SioCTS      Reads the Clear to Send (CTS) modem status bit.
  1753.          SioDCD      Reads the Data Carrier Detect (DCD) modem status bit.
  1754.          SioDone     Terminates further serial processing.
  1755.          SioDSR      Reads the Data Set Ready (DSR) modem status bit.
  1756.          SioDTR      Set, clear, or read the Data Terminal Ready (DTR) bit.
  1757.          SioError    Displays error in text.
  1758.          SioFIFO     Sets the interrupt level for the INS16550.
  1759.          SioFlow     Enables / disables hardware flow control.
  1760.          SioGetc     Reads the next character from the serial line.
  1761.          SioInfo     Returns library version number.
  1762.          SioIRQ      Assigns an IRQ line and interrupt service to a port.
  1763.          SioLine     Reads the line status register.
  1764.          SioLoopBack Performs a UART loopback test.
  1765.          SioModem    Reads the modem status register.
  1766.          SioParms    Sets parity, stop bits, and word length.
  1767.          SioPorts    Sets # ports, 1st DigiBoard ports & status register.
  1768.          SioPutc     Transmit a character over a serial line.
  1769.          SioReset    Initialize a serial port for processing.
  1770.          SioRI       Reads the Ring Indicator (RI) modem status bit.
  1771.          SioRTS      Sets, clears, or reads the Request to Send (RTS) line.
  1772.          SioRxBuf    Sets up receive buffer.
  1773.          SioRxFlush  Flushes (clears) the receive buffer.
  1774.          SioRxQue    Returns the number of characters in the receive queue.
  1775.          SioTimer    Returns the number of system clock tics.
  1776.          SioTxBuf    Sets up transmit buffer.
  1777.          SioTxFlush  Flushes (clears) the transmit buffer.
  1778.          SioTxQue    Returns the number of characters in the transmit queue.
  1779.          SioUART     Sets the UART base address.
  1780.          SioUnGetc   "Un-gets" (puts back) a specified character.
  1781.  
  1782.  
  1783.          9.3 Further Reading
  1784.  
  1785.  
  1786.          The best way to learn about serial communications  is  to  read  a
  1787.          good  book  on the subject. Several good texts are available.  Two
  1788.          that I like are (sorry but most communications  books  use  C  for
  1789.          their examples) :
  1790.  
  1791.          (1) C Programmers's Guide to Serial Communications by Joe Campbell
  1792.          (SAMS)
  1793.  
  1794.          (2) Mastering Serial Communications by Peter Gofton (SYBEX).
  1795.  
  1796.  
  1797.  
  1798.  
  1799.  
  1800.         PCL4P Users Manual                                     Page 30
  1801.          10.0 Other MarshallSoft Computing Products for Pascal
  1802.  
  1803.          10.1 The LZW Data Compression Library for Pascal
  1804.  
  1805.  
  1806.          LZW4P  consists  of a variable code size implementation of the LZW
  1807.          (Lempel-Ziv-Welch) algorithm  for  compressing  and  decompressing
  1808.          data.   LZW does particularly well on text files, achieving better
  1809.          than a 50 % compression ratio for many files.
  1810.  
  1811.          The  LZW  algorithm  is  considered  to be one of the best general
  1812.          purpose algorithms available today.  The  new  high  speed  modems
  1813.          that  employ  on-the-fly  data  compression (such as MNP 5.0 & the
  1814.          V.42 bis international standard) use the LZW  algorithm,  as  well
  1815.          as such well known utility programs such as PKZIP.
  1816.  
  1817.          The  LZW  Data Compression Library for Pascal is available for $35
  1818.          plus $3 S&H ($6 overseas).
  1819.  
  1820.  
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  
  1856.  
  1857.  
  1858.  
  1859.  
  1860.         PCL4P Users Manual                                     Page 31
  1861.  
  1862.